草庐IT

c++ - Swig -includeall 除了...

全部标签

c++ - 防止编译器不断折叠表达式的技巧

我的程序中有一个字符串文字,我正在尝试创建一个业余校验和以确保该字符串文字没有在可移植可执行文件中被替换。为此,我创建了字符串文字的散列,并将其作为整数文字存储在程序中。现在我有两个文字,一个用于字符串,一个用于散列。在我的代码中,我通过使用以相同方式散列字符串文字的函数来实现校验和,我创建了一个新的运行时散列并根据散列文字检查该散列。问题当然是,通过编译器优化,它可能会预先计算运行时哈希,然后我会根据哈希文字检查哈希文字,并且校验和将始终返回true。所以我正在寻找一种技巧,让编译器认为字符串文字是一个动态字符串,可以是任何东西,这样它就不会对运行时哈希进行常量折叠优化,并且我的代码

c++ - 为什么需要多维数组中更高维度的维度范围?

根据帖子,Passinga2DarraytoaC++functionintarray[10][10];voidpassFunc(inta[][10])//从编译器内部的角度来看,为什么需要这个更高的维度。 最佳答案 另一种解释(数组到指针衰减):假设我们有一个一维数组,我们这样使用它:intarray[10];inti=array[3];编译器必须知道在哪里可以找到array[3]。它知道它需要跳过3个int才能到达array[3]中的那个。所以它有效。但是如果我们有一个二维数组,intarray[2][5];inti=array[

c++ - 从 C 代码调用 C++ 方法

我已阅读以下文章here解释了如何从纯C代码调用基于C++的函数。这个方法最好用下面的例子来解释://C++code:classC{//...virtualdoublef(int);};extern"C"doublecall_C_f(C*p,inti)//wrapperfunction{returnp->f(i);}/*Ccode:*/doublecall_C_f(structC*p,inti);voidccc(structC*p,inti){doubled=call_C_f(p,i);/*...*/}但是,我不明白我是否应该在哪里定义一个由“p”指向的实例。请注意,在C代码中,它作为

c++ - 在连续的内存位置存储字符串文字

#include#includeintmain(){char*s[]={"cricket","tennis","football"};printf("Stringare:\n\n");printf("%s\n",*(s));printf("%s\n",*(s+1));printf("%s\n",*(s+2));printf("\n\n");printf("Startinglocationsofthestringare:\n\n");printf("%d\n",*(s));printf("%d\n",*(s+1));printf("%d\n",*(s+2));printf("\n\n")

c++ - 1亿节点大图的C++表示

我正在处理一个非常大的图,它有5亿个节点,节点的平均度为100。所以它是一种稀疏图。我还必须存储每条边的权重。我目前正在使用两个vector,如下所示//Vcouldbe100millionvector*AdjList=newvector[V];vector*Weight=newvector[V];使用vector的vector似乎不节省空间。它需要超过400GB的存储空间。有没有更好的节省空间的方法来将这个大图存储在内存中?有使用任何C++库的建议吗? 最佳答案 初步说明您可以考虑使用vector的vector而不是使用动态内存分

c++ - 检测对范围外变量的访问

Codelikethis是未定义的行为,因为它访问一个不再在范围内(其生命周期已结束)的局部变量。intmain(){int*a;{intb=42;a=&b;}printf("%d",*a);//UB!return0;}我的问题:是否有自动检测此类错误的好方法?它似乎应该是可检测的(当变量超出范围时将堆栈空间的一部分标记为不可用,然后如果该空间被访问则提示),但是Valgrind3.10、Clang4的AddressSanitizer和UndefinedBehaviorSanitizer,以及GCC6的AddressSanitizer和UndefinedBehaviorSanitize

c++ - 在 C++ 代码中使用的 C header 中转发声明枚举

你不能forwarddeclareanenuminC++,但你可以在C中。对于使用一些C++代码的C代码库,有没有一种方法可以在C中使用前向声明的枚举,当在C++中使用该header时(在extern"C"中)不会导致错误{..}block)?例子:extern"C"{enumMyEnum;}intmain(){return0;}GCC给出错误:error:useofenum‘MyEnum’withoutpreviousdeclarationenumMyEnum;^~~~~~Clang也失败了:error:ISOC++forbidsforwardreferencesto'enum'ty

c++ - 是否可以在不修改 C++ 的情况下使用 C11 原子包含 C header ?

我正在尝试编写使用thisClibrary在C++应用程序中未经修改。它使用C11原子。考虑以下程序,我们可以将其放入名为main.cc的文件中。#include"mpscq.h"intmain(){}如果我用g++-std=c++11-cmain.cc编译它,我会得到一整套错误,如下所示。usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdatomic.h:68:9:error:‘_Atomic’doesnotnameatypetypedef_Atomic__UINT_FAST32_TYPE__atomic_uint_fast32_t;^/usr/

c++ - 在 C/C++ 中从 int 获取单个数字以进行基数排序的最佳方法

从具有n个数字的int中获取单个数字以用于基数排序算法的最佳方法是什么?我想知道在C/C++中是否有特别好的方法,如果没有,一般的最佳解决方案是什么?编辑:澄清一下,我正在寻找一种解决方案,而不是将其转换为字符串并将其视为数字数组。 最佳答案 使用大小为2^k的数字。要提取第n个数字:#defineBASE(2>(n*k))&MASK;}使用移位和掩码(由基数为2的幂启用)避免昂贵的整数除法指令。之后,选择最佳基础是一个实验性问题(针对您的特定硬件进行时间/空间权衡)。可能k==3(base8)效果很好并且限制了buckets的数量

c++ - 面向对象编程

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我正在用C++开发一个项目。我意识到我的程序不是面向对象的。我有一个main.cpp和几个用于不同目的的header。每个header基本上是相关函数的集合,带有一些全局变量来保留数据。我还有一个用于管理窗口的windowing.h。这包含winMain()和winProc()。当事件发生时(如单击按钮)或需要信息时(如“将此窗口设置为多大?”),它会调用